#函数的创建def
# def jiafa(a,b):
#     return a+b
# a=jiafa(4,5)
# print(a)

# #个数可变的位置参数：*XXX
# def run(*i,a):
#     print(i)
#     print(i[0])
# run(1,a=1)# (1,)照元组输入
# run(2,3,4,a=5)# (2, 3, 4)

# #个数可变的关键字形参：**XXX
# def run(**i):
#     print(i)
# #run (1)#错误
# run (a=1)# {'a': 1}字典
# run(a=1,b=2,c=3)# {'a': 1, 'b': 2, 'c': 3}

# #注意：在一个函数定义过程中 既有个数可变的位置参数，又有位置可变的关键字形参，位置参数必须放形参后边
# def run(b,*i1,a,**i2):#关键字形参后不能放任何参数！！！
#     pass

#函数的参数传入
# #单*的作用：在函数调用时，将列表（也可是元组）中的元素都转换为位置实参传入
# def run(a,b,c):
#     print(a,end=' ')
#     print(b,end=' ')
#     print(c,end=' ')
# a=[11,22,33]# 11 22 33
# run(*a)# 在函数调用时，将列表（也可是元组）中的元素都转换为位置实参传入

# #双**的作用：在函数调用时，可以将字典中的元素转换为形参传入
# def run(a,b,c):
#     print(a, end=' ')
#     print(b,end=' ')
#     print(c,end=' ')
# a={'a':11,'b':22,'c':33}# 11 22 33
# run (**a)# 在函数调用时，可以将字典中的元素转换为形参传入

# #关键字形参：，*，
# def run(a,b,*,c,d):# *号后边的参数只能用关键字实参传递，*为关键字形参
#     print(c)
# run (1,2,c=3,d=4)

# #顺序：
# def run(a,*,b,**j):#  *,b或者是*i
#     print(a)
# run (1,b=2,c=6,d=7)

# #函数体内变量名称前加global，该变量变成全局变量：
# def run():
#     global i
#     i='name'
#
# run()
# print(i)# name

# #第归函数（只是一个思想）
# #输入n，输出n的阶乘
# def jiecheng(n):
#     if n==1:
#         return 1
#     else:
#         return jiecheng(n-1)*n
# n=int (input(''))
# n=jiecheng(n)
# print(n)

# 不定参数：*args，，不知道传入函数有多少个参数的时候用
# def func_arg(*args):
#     print(args) #('youzan', 'dba', 'hello')
# func_arg("youzan",'dba','hello')

# 传入键值对：**kwargs，，不知道传入多少个的键值对给一个函数的时候用
# #利用它转换参数为字典
# def kw_dict(**kwargs):
#     return kwargs
# print(kw_dict(a=1,b=2,c=3))
# # {'a': 1, 'b': 2, 'c': 3}
